package mid;

/**
 描述
 以字符串的形式读入两个数字，编写一个函数计算它们的和，以字符串形式返回。

 数据范围：len(s),len(t) \le 100000len(s),len(t)≤100000，字符串仅由'0'~‘9’构成
 要求：时间复杂度 O(n)O(n)
 示例1
 输入：
 "1","99"
 返回值：
 "100"
 说明：
 1+99=100
 示例2
 输入：
 "114514",""
 返回值：
 "114514"
 *
 * @author WangZhiJian
 * @since 2022/1/16 0016
 */
public class 大数加法 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public static String solve (String s, String t) {
        // write code here

        // 进位
        int incrNum = 0;
        int i = 0;
        int maxLen = Math.max(s.length(),t.length());
        StringBuilder result = new StringBuilder(maxLen + 1);
        char base = '0';

        while ( incrNum > 0 || i < maxLen){
            // 从后往前加
            int snum = i < s.length() ? s.charAt(s.length()-1-i) - base : 0;
            int tnum = i < t.length() ? t.charAt(t.length()-1-i) - base : 0;

            int curSum = snum + tnum + incrNum;
            result.append(curSum % 10);
            incrNum = curSum / 10;
            i++;
        }

        return result.reverse().toString();
    }

    public static void main(String[] args) {
        System.out.println(solve("9","99999999999999999999999999999999999999999999999999999999999994"));
    }
}
